package logica_de_presentacion;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyVetoException;
import java.util.ArrayList;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.event.InternalFrameEvent;
import javax.swing.event.InternalFrameListener;

import comun.Pelicula;
import logica_de_negocio.ExcepDeleteOnCascade;
import logica_de_negocio.FaltanDatosEnLaBaseDeDatos;
import logica_de_negocio.gestorPeli;

public class FormularioBorrarPeliculaPorDirector extends JInternalFrame
		implements ActionListener, InternalFrameListener {

	private static final long serialVersionUID = 1L;
	protected JComboBox<String> jcDirector;
	protected JButton borrar, cancelar;
	private String director;
	private FormularioTituloDePeliculaPorDirector formularioTituloDePeliculaPorDirector;
	private MenuInicial clasePadre;

	public FormularioBorrarPeliculaPorDirector(MenuInicial clasePadre) throws ClassNotFoundException {

		super("Buscar Pelicula por titulo", true, true, true, true);
		this.setVisible(true);
		this.getContentPane().setLayout(new BorderLayout());
		this.clasePadre=clasePadre;

		JPanel pBotones = new JPanel();

		// BORRAR
		ImageIcon imagenBorrar = createImageIcon("/logica_de_presentacion/imagenes/BORRAR.gif");
		borrar = new JButton("Borrar", imagenBorrar);
		borrar.addActionListener(this);
		pBotones.add(borrar);

		// CANCELAR
		ImageIcon imagenCancelar = createImageIcon("/logica_de_presentacion/imagenes/CANCELAR.gif");
		cancelar = new JButton("Cancelar", imagenCancelar);
		cancelar.addActionListener(this);
		pBotones.add(cancelar, "South");

		// BOTONES
		this.getContentPane().add(pBotones, BorderLayout.SOUTH);
		gestorPeli gp = new gestorPeli();
		jcDirector = new JComboBox<String>(gp.getDirectores());

		this.getContentPane().add(jcDirector, BorderLayout.CENTER);
		JLabel jl = new JLabel("Indique el director:");
		this.getContentPane().add(jl, BorderLayout.NORTH);

		this.pack();

	}
	@Override
	public void actionPerformed(ActionEvent e) {

		JButton BotonPulsado = (JButton) e.getSource();

		if (BotonPulsado == cancelar) {
			this.dispose();
		}
		if (BotonPulsado == borrar) {

			director = (String) jcDirector.getSelectedItem();
			try {
				borrar();
			} catch (ClassNotFoundException e1) {
				JOptionPane.showMessageDialog(new Frame(),
						"No hay informacion en la base de datos");
				this.dispose();
			}
			this.dispose();

		}

	}

	/** Returns an ImageIcon, or null if the path was invalid. */
	protected static ImageIcon createImageIcon(String path) // ICONO
	{
		java.net.URL imgURL = Button.class.getResource(path);
		if (imgURL != null) {
			return new ImageIcon(imgURL);
		} else {
			System.err.println("Couldn't find file: " + path);
			return null;
		}
	}

	public void borrar() throws ClassNotFoundException {

		gestorPeli gp = new gestorPeli();
		ArrayList<Pelicula> retorno = gp.busDirec(director);
		
		if (retorno.size() == 1) {
			Pelicula p = retorno.get(0);// COMO SOLO HAY UNO
			boolean bor = false;
			int id_p=p.getId_p();
			try {
				bor = gp.borrar(id_p, new ExcepDeleteOnCascade());
			} catch (ExcepDeleteOnCascade e) {
				int res = JOptionPane
						.showConfirmDialog(
								new Frame(),
								"Al eliminar la pelicula tambien se eliminaran los comentarios de los usuarios y estos dejaran de seguir la pelicula, Desea borrarla?");
				// YES=0, NO=1,Cancel =2
				if (res == 0) {
					e.setAceptado(true);
					try {
						bor = gp.borrar(id_p, e);
					} catch (ExcepDeleteOnCascade e2) {
					}
				}
			}
			if (bor) {
				JOptionPane.showMessageDialog(new Frame(), "Se ha borrado la pelicula");
			} else {
				JOptionPane.showMessageDialog(new Frame(), "NO se ha borrado la pelicula");
			}
		} else {

			formularioTituloDePeliculaPorDirector = new FormularioTituloDePeliculaPorDirector(
					director);
			formularioTituloDePeliculaPorDirector
					.addInternalFrameListener(this);
			try {
				formularioTituloDePeliculaPorDirector.setSelected(true);
			} catch (PropertyVetoException e) {
				
			}
			clasePadre.add(formularioTituloDePeliculaPorDirector);
		}
	}

	@Override
	public void internalFrameOpened(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameClosing(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameClosed(InternalFrameEvent e) {

		if (e.getSource() == formularioTituloDePeliculaPorDirector) {
			
			String titulo=formularioTituloDePeliculaPorDirector.getSeltitulo();
			
			gestorPeli gp=new gestorPeli();
			try {
				Pelicula p=gp.getPelicula(titulo,director);
				int id_p=p.getId_p();
				boolean bor=false;
				
				try {
					bor=gp.borrar(id_p, new ExcepDeleteOnCascade());
				} catch (ExcepDeleteOnCascade e1) {
					int res = JOptionPane
							.showConfirmDialog(
									new Frame(),
									"Al eliminar la pelicula tambien se eliminaran los comentarios de los usuarios y estos dejaran de seguir la pelicula, Desea borrarla?");
					// YES=0, NO=1,Cancel =2
					if (res == 0) {
						e1.setAceptado(true);
						try {
							bor = gp.borrar(id_p, e1);
						} catch (ExcepDeleteOnCascade e2) {
						} catch (ClassNotFoundException e2) {
							JOptionPane.showMessageDialog(new Frame(),
									"No hay informacion en la base de datos");
							this.dispose();
						}
					}
				} catch (ClassNotFoundException e1) {
					JOptionPane.showMessageDialog(new Frame(),
							"No hay informacion en la base de datos");
					this.dispose();
				}
				
				if (bor) {
					JOptionPane.showMessageDialog(new Frame(), "Se ha borrado correctamente la pelicula");
				} else {
					JOptionPane.showMessageDialog(new Frame(), "NO se ha borrado correctamente la pelicula");
				}
				
			} catch (FaltanDatosEnLaBaseDeDatos e1) {
				JOptionPane.showMessageDialog(new Frame(), e1.getFalta());
			} catch (ClassNotFoundException e3) {
				JOptionPane.showMessageDialog(new Frame(),
						"No hay informacion en la base de datos");
				this.dispose();
			}
		}
	}

	@Override
	public void internalFrameIconified(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameDeiconified(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameActivated(InternalFrameEvent e) {
	}

	@Override
	public void internalFrameDeactivated(InternalFrameEvent e) {
	}
}
